STM32 | 您所在的位置:网站首页 › 使用STM32CUBEMX 新HAL库TF卡模拟U盘不能格式化问题 › STM32 |
一、工具
1、硬件:STM32F103VET6单片机(HAL库) 2、编译环境:Atollic TrueSTUDIO for STM32 9.3.0 3、辅助工具:STM32CubeMX 二、工程创建1、打开调试接口 2、选择时钟源 3、打开USB功能 4、选择USB中间件,配置USB为大容量存储类型,数据包的大小为4K(使用的的外部Flash一个扇区的大小为4Kbyte),其它默认 5、根据原理图,需要配置PD6引脚输出为低电平 6、配置系统时钟 7、生成工程,注意要将堆改大一些 从工程目录中可以可以看到多了一些关于USB的内容 1、工程创建后,再添加外部Flash的初始化和读写程序,用于USB调用 2、修改usbd_storage_if.c文件 使用到的一些宏定义 /** @defgroup USBD_STORAGE_Private_Defines * @brief Private defines. * @{ */ #define STORAGE_LUN_NBR 1 /* 逻辑单元号,只有一个外部flash,设置为1 */ #define STORAGE_BLK_NBR 2048 /* 扇区的数量,外部flash的大小是8Mbyte,有128块,每块16个扇区,故128*16=2048个扇区 */ #define STORAGE_BLK_SIZ 4096 /* 每个扇区的大小,外部flash扇区的大小为4096byte */初始化 /* Private functions ---------------------------------------------------------*/ /** * @brief Initializes over USB FS IP * @param lun: * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_Init_FS(uint8_t lun) { /* USER CODE BEGIN 2 */ bsp_spi1_init(); return (USBD_OK); /* USER CODE END 2 */ }状态函数 /** * @brief . * @param lun: . * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_IsReady_FS(uint8_t lun) { /* USER CODE BEGIN 4 */ if(spi_flash_read_ID() == FLASH_ID) { return (USBD_OK); } else { return USBD_FAIL; } /* USER CODE END 4 */ }读函数 /** * @brief . * @param lun: . * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 6 */ /* 因为传进来的参数是扇区的地址和扇区的大小,在进行读的时候要转换成字节地址和字节大小 */ spi1_flash_read(blk_addr*STORAGE_BLK_SIZ, buf, blk_len*STORAGE_BLK_SIZ); return (USBD_OK); /* USER CODE END 6 */ }写函数 /** * @brief . * @param lun: . * @retval USBD_OK if all operations are OK else USBD_FAIL */ int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 7 */ /* 因为传进来的参数是扇区的地址和扇区的大小,在进行写的时候要转换成字节地址和字节大小,flash写之前要擦除 */ spi1_flash_sector_erase(blk_addr*STORAGE_BLK_SIZ); spi1_flash_write(blk_addr*STORAGE_BLK_SIZ, buf, blk_len*STORAGE_BLK_SIZ); return (USBD_OK); /* USER CODE END 7 */ } 四、运行程序1、第一次运行需要格式化虚拟出来的优盘
2、格式化完成后就可以在自己的电脑上看到优盘 4、创建一个文件测试读写是否正常,然后弹出优盘重新上电复位,查看文件是否还在
#endif |
CopyRight 2018-2019 实验室设备网 版权所有 |